package com.kinghunt.misp.service.api.userx;

import com.kinghunt.misp.common.dto.userx.UserDTO;
import com.kinghunt.misp.common.param.userx.UserLoginParam;
import com.kinghunt.misp.common.param.userx.UserQueryCondition;
import com.bygoodtech.kings.common.dto.ApiResult;
import com.bygoodtech.kings.common.dto.page.PageInfo;

import java.util.List;

/**
 * @author jiangtao
 * @date 2019-10-22 12:59.
 */
public interface UserReadService {
    /**
     * 根据用户ID查询用户信息
     *
     * @param id 用户ID
     * @return 用户信息
     */
    ApiResult<UserDTO> getUserById(Long id);

    /**
     * 根据用户ID批量查询用户信息
     *
     * @param ids 批量用户ID
     * @return 批量用户信息
     */
    ApiResult<List<UserDTO>> getUsersByIds(List<Long> ids);

    /**
     * 查询机构下所有用户信息
     *
     * @param orgId 机构ID
     * @return 批量用户信息
     */
    ApiResult<List<UserDTO>> getUsersByOrganizationId(Long orgId);

    /**
     * 根据查询条件分页搜索用户
     *
     * @param condition 搜索条件
     * @return 搜索分页结果
     */
    ApiResult<PageInfo<UserDTO>> searchUsers(UserQueryCondition condition);

    /**
     * 根据用户名和密码登录
     *
     * @param userName 用户名
     * @param password 密码
     * @return token
     */
    ApiResult<String> loginWithNameAndPassword(String userName, String password);

    /**
     * 用户登录
     *
     * @param param
     * @return
     */
    ApiResult<String> login(UserLoginParam param);

    /**
     * 根据手机号和动态密码登录
     *
     * @param mobilePhone 手机号码
     * @param verifyCode 验证码
     * @return token
     */
    ApiResult<String> loginWithMobilePhoneAndVerifyCode(String mobilePhone, String verifyCode);

    /**
     * 根据手机号获取验证码
     *
     */
    ApiResult<String> getVerifyCodeByPhone(String mobilePhone);
    /**
     * 验证用户名可用
     *
     */
    ApiResult<Boolean> validateUserName(String userName);
}
